import requests as http




class HttpUtils:
    """
    HTTP工具类，封装了常用的HTTP请求方法，并支持从参数发送请求。
    """

    @staticmethod
    def get(url, params=None, headers=None):
        """
        发送GET请求。

        :param url: 请求的URL
        :param params: 请求参数，字典类型
        :param headers: 请求头，字典类型
        :return: 响应对象
        """
        log.info(f"请求url={url},headers={headers},params={params}")
        resp=http.get(url, params=params, headers=headers)
        try:
            log.info(f"响应参数:{resp.json()}")
        except Exception as e:
            log.info(f"响应状态码:{resp.status_code}")
        return resp

    @staticmethod
    def post(url, data=None, json=None, headers=None):
        """
        发送POST请求。

        :param url: 请求的URL
        :param data: 请求体数据，字典类型
        :param json: JSON格式的请求体数据，字典类型
        :param headers: 请求头，字典类型
        :return: 响应对象
        """
        log.info(f"请求url={url},headers={headers},data={data},json={json}")
        resp=http.post(url, data=data, json=json, headers=headers)
        try:
            log.info(f"响应参数:{resp.json()}")
        except Exception as e:
            log.info(f"响应状态码:{resp.status_code}")
        return resp

    @staticmethod
    def put(url, data=None, headers=None):
        """
        发送PUT请求。

        :param url: 请求的URL
        :param data: 请求体数据，字典类型
        :param headers: 请求头，字典类型
        :return: 响应对象
        """
        log.info(f"请求url={url},headers={headers},data={data}")
        resp=http.put(url, data=data, headers=headers)
        log.info(f"响应参数:{resp.json()}")
        return resp

    @staticmethod
    def delete(url, headers=None):
        """
        发送DELETE请求。

        :param url: 请求的URL
        :param headers: 请求头，字典类型
        :return: 响应对象
        """
        log.info(f"请求url={url},headers={headers}")
        resp=http.delete(url, headers=headers)
        log.info(f"响应参数:{resp.json()}")
        return resp

    @staticmethod
    def patch(url, data=None, headers=None):
        """
        发送PATCH请求。

        :param url: 请求的URL
        :param data: 请求体数据，字典类型
        :param headers: 请求头，字典类型
        :return: 响应对象
        """
        log.info(f"请求url={url},headers={headers},data={data}")
        resp=http.patch(url, data=data, headers=headers)
        log.info(f"响应参数:{resp.json()}")
        return resp

    @staticmethod
    def send_request(method, url, params=None, data=None, json=None, headers=None):
        """
        根据参数发送HTTP请求。

        :param method: 请求方法（'GET', 'POST', 'PUT', 'DELETE', 'PATCH'）
        :param url: 请求的URL
        :param params: 请求参数，字典类型（仅适用于GET请求）
        :param data: 请求体数据，字典类型（适用于POST, PUT, PATCH请求）
        :param json: JSON格式的请求体数据，字典类型（适用于POST, PUT, PATCH请求）
        :param headers: 请求头，字典类型
        :return: 响应对象
        """
        method = method.upper()
        if method == 'GET':
            return HttpUtils.get(url, params=params, headers=headers)
        elif method == 'POST':
            return HttpUtils.post(url, data=data, json=json, headers=headers)
        elif method == 'PUT':
            return HttpUtils.put(url, data=data, headers=headers)
        elif method == 'DELETE':
            return HttpUtils.delete(url, headers=headers)
        elif method == 'PATCH':
            return HttpUtils.patch(url, data=data, headers=headers)
        else:
            raise ValueError(f"Unsupported HTTP method: {method}")
